<?php

/**
 * @file button3D.php
 * @brief Clase para generar un boton con rasgos y estilos 3-D
 * @author DyrTechnologies
 * @version V 1.0
 * @date Wed Oct 03 2007
 *
 *  Part of the CEFIRO dynamic web framework project
 *
 *  Copyright (C) 2007  Dyr technologies http://dyrtech.com.ve
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * @class Clase button3d
 */


/**
 * @brief Define la ruta a la hoja de estilos para el boton 3d
 *
 */

require_once(CEF_INPUT_OPT);

define("BUTTON3D_CSS",FULL_URL."button3d/button3d.css");
$button_instance = 0;

class button3d extends input_opt {

	private $type;
	private $text;
	private $name;

	/**
	 * @brief Constructor por omision y parametrico de la clase
	 * aprovechamos el hecho de que cada atributo
	 * tiene un valor por omision predefinido para no
	 * rehacer el constructor
	 *
	 * @param string $_type
	 * @param string $_text
	 * @param input_opt $_opt
	 * @param string $_name
	 * @return button3d La instancia de la clase
	 */
	public function button3d($_name='__button', $_text='Aceptar', $_type='button',$_opt = ''){

		/**
		 * @brief Se asignan los valores a los atributos de la clase boton 3D segun vengan dados al llamar al constructor de la misma notar que existen valores por omision para cada atributo
		 */
		$this->type=$_type;
		$this->text=$_text;

		/**
		 * @brief $button_instance es una variable para incrementar el numero de botones existentes
		 */
		global $button_instance;
		$button_instance++;

		/**
		 * @brief El nombre del widget es el tipo con el numero de la instancia que representa o el nombre pasado por omision en caso contrario
		 */

		if($_name!="__button")
			$this->name=$_name;
		else
			$this->name="button".$button_instance;

		/**
		 * @brief Si las opciones del campo no estan ajustadas lo hacemos explicitamente una instancia de input_opt
		 */
		if(!($_opt instanceof input_opt))
			$_opt = new input_opt();
		$this->equalize($_opt);
	}

	/**
	 * @brief Las funciones get_VAR devuelven las variables que tenga ajustadas la instancia tipo (type), texto(text), nombre(name), opciones(opt)
	 *
	 * @return string Valor de VAR
	 */
	public function get_type(){
		return $this->type;
	}

	public function get_text(){
		return $this->text;
	}

	public function get_name(){
		return $this->name;
	}

	public function get_opt(){
		return $this->get_input_opt();
	}

	/**
	 * @brief Las funciones set_VAR ajustan las variables de la instancia; tipo (type), texto(text), nombre(name), opciones(opt)
	 */

	public function set_type($_type){
		$this->type=$_type;
	}

	public function set_text($_text){
		$this->text=$_text;
	}

	public function set_name($_name){
		$this->name=$_name;
	}

	public function set_opt($_opt=''){
		if(!($_opt instanceof input_opt))
			$_opt = new input_opt();
		$this->equalize($_opt);
	}

	/**
	 * @brief Ajusta los valores de smarty de acuerdo a lo especificado por los atributos de la instancia de button3d
	 *
	 */
	private function smarty_button3d(){

		global $smarty;

		/**
		 * @brief Asignacion atributo por atributo a lo deseado en las variables de smarty
		 */
		$smarty->assign("type",$this->get_type());
		$smarty->assign("text",$this->get_text());
		$smarty->assign("__opt",$this->get_input_opt());
		$smarty->assign("name",$this->get_name());

		/**
		 * @brief Asigna la hoja de estilo que contiene los rasgos del boton3d a una variable
		 */
		$smarty->assign("button3dcss",BUTTON3D_CSS);
	}

	/**
	 * @brief Devuelve el Boton 3D como una cadena con sus parametros
	 *
	 * @return string $retval
	 */
	public function get_button3d(){
		$retval="";

		if( strlen( $this->get_name() ) > 0)
			$retval.=$this->get_name()." ";
		if( strlen( $this->get_type() ) > 0)
			$retval.=$this->get_type()." ";
		if( strlen( $this->get_text() ) > 0)
			$retval.=$this->get_text()." ";
		if( strlen( $this->get_opt() ) > 0)
			$retval.=$this->get_opt()." ";

		return $retval;
	}

	/**
	 * @brief Asigna el button3d a la variable $smarty para su renderizacion
	 *
	 */
	public function display_button3d($fetch = false){
		global $smarty;
   		$smarty->template_dir = dirname(__FILE__).'/';
		$this->smarty_button3d();

		if(!$fetch){
			$smarty->assign( $this->name , $smarty->fetch('button3d.tpl') );
			return 1;
		}
		else
			return $smarty->fetch('button3d.tpl');

	}
}

?>